27. Virtual Memory II

虚拟内存 II
AP SHANTHI博士

 

本模块的目标是讨论虚拟内存的其他实现,即分段和分段分页,并比较和对比虚拟内存的各种实现。将介绍虚拟机的概念。此外,还将讨论用于改善主存储器访问时间的各种技术。

 

Address Mapping Using Segments:上一模块详细讨论了虚拟内存管理系统,其中主内存和程序被分成相等大小的页面。但是,固定的页面大小在程序大小和程序的逻辑结构方面造成了一定的困难。将程序和数据划分为称为段的逻辑部分更为方便。甲段是一组具有给定名称相关联的逻辑上相关的指令或数据元素。段可以由程序员或由操作系统生成。段的例子是子程序、数据数组、符号表或用户程序。与分页一样,分段程序生成的地址称为逻辑地址。这类似于虚拟地址,除了逻辑地址空间与可变长度段而不是固定长度页面相关联。逻辑地址由段号和偏移量组成。使用段描述符表将段号映射到物理地址。这些表与分页中的页表具有相同的功能。由于段的大小可能会有所不同,因此还需要进行边界检查以确保偏移量在段内。内存管理单元的功能类似于虚拟内存映射概念,将逻辑地址映射到物理地址。分割概念如图 31.1 所示。


 

除了重定位信息,每个段描述符条目都有与之相关的保护信息。分段提供共享常用数据和程序的优势。共享程序被放置在每个用户逻辑地址空间中的唯一段中,以便可以共享单个物理副本。

 

段不能进一步分解,整个段必须在内存或磁盘上。段的可变大小导致内存中的外部碎片,而在分页中,我们只有内部碎片,其中最后一页可能无法完全填满。当谈到将新段也引入主内存时,我们有更多的复杂性。在分页的情况下,所有块的大小相同。因此,任何块都可以替换任何块。然而,由于段的大小不同,操作系统必须识别一个足够大的段以容纳传入的段。这是通过以下技术完成的:

First fit – 选择足够大以容纳传入段的第一个段。
最佳拟合 – 选择最佳拟合段,即留下最少可用空间的段。例如,如果段大小为 4K,而可用段的大小为 5K 和 8K,则将选择 5K 段。
Worst fit – 最适合的,留下最大空间的将被选择。在前面的示例中,将选择大小为 8K 的段。
 

请注意,在分段的情况下使用 TLB 也是为了加速内存访问。

 

使用分段分页的地址映射:还可以使用称为分段分页的第三种内存管理技术。顾名思义,这是分段和分页的结合。已经提到逻辑空间的特性是它使用可变长度的段。允许每个段的长度根据正在执行的程序的需要增长和收缩。指定段长度的一种方法是将多个相同大小的页面与其相关联。要了解这是如何完成的,请考虑图 31.2 中所示的逻辑地址。逻辑地址被划分为三个字段。段字段指定段号。page 字段指定段内的页面,word 字段给出页面内的特定单词。一个页面字段k位最多可以指定 2k 页。段号可能只与一页相关联,也可能与多达 2k 页相关联。因此,段的长度将根据分配给它的页数而变化。

 

逻辑地址到物理地址的映射是通过两个表来完成的 。逻辑地址的段号指定了段表的地址。段表中的条目是页表基址的指针地址。这个新地址通常称为线性地址。页表基数被添加到逻辑地址中给定的页码。总和产生指向页表中条目的指针地址。页表中的值提供了物理内存中的块号。块字段与字字段的串联产生最终的物理映射地址。


 

因此,我们使用页面来描述段的组件。这使得段易于管理,我们可以在段之间交换内存。我们只需要为那些本身已经分配的段分配页表条目。共享的段可以用共享页表来表示。这两个映射表可以存储在主存储器中。因此,来自 CPU 的内存引用将需要对内存进行三次访问——一次来自段表,一次来自页表,第三次来自主内存。这会进一步减慢系统的速度。为了避免这种速度损失,在这种情况下也使用了 TLB。

 

内存管理系统:在多个程序驻留在内存中的多道程序环境中,有必要在内存中移动程序和数据,改变给定程序使用的内存量,并防止程序更改其他程序。多道程序对计算机内存的需求产生了对内存管理系统的需求。内存管理系统是一组硬件和软件程序,用于管理驻留在内存中的各种程序。内存管理软件是许多计算机中可用的整体操作系统的一部分。硬件包括 MMU 中的页表、段表和 TLB。 在上一节中。将所有内容放在一起,我们可以说内存管理系统的基本组件是:

 

1. 一种用于动态存储重定位的工具,将逻辑内存引用映射到物理内存地址

 

2. 共享不同用户存储在内存中的公共程序的规定

 

3. 保护信息免受用户之间未经授权的访问,防止用户更改操作系统功能。

 

动态存储重定位的第一个功能就是我们在上一节中讨论的内容。

 

通用程序的共享是多道程序系统的一个组成部分。例如,几个希望编译他们的 C 程序的用户应该能够共享编译器的一个副本,而不是每个用户在内存中都有一个单独的副本。驻留在内存中的其他系统程序也由多道程序系统中的所有用户共享,而无需生成多个副本。

 

多道程序设计的第三个问题是保护一个程序免于与另一个程序发生不必要的交互。不想要的交互的一个例子是一个用户未经授权复制另一个用户的程序。保护的另一方面涉及防止偶尔的用户执行操作系统功能从而中断计算机安装中的有序操作序列。必须对未经授权的人员保密某些程序,以防止在组织的机密活动中滥用。通过支持在每个页面/段中添加保护和访问权限信息,在虚拟内存中再次支持此功能。该架构支持以下功能以提供保护:

至少提供两种模式,表示正在运行的进程是用户进程还是操作系统进程,称为内核进程或监督进程。
提供用户进程可以使用但不能修改的处理器状态的一部分。该状态包括用户/管理员模式位、异常启用/禁用位和存储器保护信息。禁止用户写入此状态,因为如果用户可以给自己管理员权限、禁用异常或更改内存保护,操作系统将无法控制用户进程。
提供处理器可以从用户模式到主管模式,反之亦然的机制。第一个方向通常由系统调用完成 ,作为特殊指令实现,将控制权转移到管理程序代码空间中的专用位置。从系统调用开始,PC 就被保存下来,并且处理器被置于管理模式。返回到用户模式就像一个子程序返回,它恢复了以前的用户/主管模式。
提供限制内存访问的机制,以保护进程的内存状态,而无需在上下文切换时将进程交换到磁盘。
 

因此,上述讨论清楚地表明,我们可以在体系结构的支持下通过操作系统实施保护。但是,操作系统由数千万行代码组成,其中存在相当多的错误。操作系统中的缺陷导致了经常被利用的漏洞。这个问题,以及不实施保护可能比过去成本高得多的可能性,导致一些人寻找代码库比完整操作系统小得多的保护模型,例如虚拟机。

 

虚拟机和保护:虽然虚拟机在单用户计算机中不是很流行,但由于以下原因,它们最近越来越流行:

隔离和安全在现代系统中的重要性日益增加
标准操作系统在安全性和可靠性方面的失败
在许多不相关的用户之间共享一台计算机,以及
处理器原始速度的显着提高,这使得 VM 的开销更容易接受。
 

VM 在二进制指令集架构 (ISA) 级别提供完整的系统级环境。它们呈现出一种错觉,即 VM 的用户拥有自己的整台计算机,包括操作系统的副本。一台计算机运行多个虚拟机,可以支持多种不同的操作系统。在传统平台上,单个操作系统“拥有”所有硬件资源,但对于 VM,多个操作系统共享硬件资源。支持 VM 的软件称为虚拟机监视器(VMM) 或管理程序;VMM 是虚拟机技术的核心。底层硬件平台称为主机,其资源在来宾之间共享。虚拟机。VMM 决定如何将虚拟资源映射到物理资源。物理资源可以是时间共享的、分区的,甚至可以在软件中进行模拟。VMM 比传统操作系统小得多。每个客户操作系统都维护自己的一组页表。VMM 在物理内存和虚拟内存之间添加了一个称为“真实内存”的内存级别,并且 VMM 维护将来宾虚拟地址映射到物理地址的影子页表。

 

提高主存访问次数:最后,我们将了解用于提高主存性能的各种技术。图 31.3 显示了用于增加主存储器带宽的各种方法。第一种方法是一种简单的方法,其中 CPU、缓存、总线和内存具有相同的宽度,例如 32 位或 64 位。第二个显示了宽内存组织,其中 CPU/Mux 宽度为 1 个字。但是,Mux/Cache、总线和存储器宽度是 N 个字。Alpha 处理器使用 64 位和 256 位,UtraSPARC 使用 64 位和 512 位。第三个组织是交错组织,CPU、缓存和总线的宽度为1个字,而内存有N个模块(比如4个模块);例如,单词交错。一级缓存通常以 1 个字的物理宽度组织,因为大多数 CPU 访问都是该大小。CPU 和内存之间更广泛的连接会产生额外的成本,通常称为内存总线。这可能有助于二级缓存,因为复用可以在一级和二级缓存之间,而不是在关键路径上。

 

存储芯片可以组织成组,一次读取或写入多个字,而不是单个字。地址到存储体的映射会影响内存系统的行为。这种映射称为交织因子。交错内存通常是指字交错的内存库。它用于优化顺序内存访问。缓存读取未命中是与字交错存储器的理想匹配,因为块中的字是按顺序读取的。回写缓存使写入和读取顺序进行,从字交错内存中获得更高的效率。但缺点是芯片数量减少,主存扩展困难。


 

我们还可以查看独立的存储库,其中每个存储库都需要单独的地址线,可能还有单独的数据总线。这对于允许 CPU 在缓存未命中后继续处理的非阻塞缓存特别有用,可能允许同时处理多个缓存未命中。否则,多个读取将由单个内存端口提供服务,并且只会获得与传输重叠访问的小好处。通常,独立于内存技术,通过使内存及其总线更宽,或两者兼而有之,使用内存组可以获得更高的带宽。

 

概括

在需要执行时自动将程序和数据块移动到物理主内存中的技术称为虚拟内存技术。
虚拟内存是使用硬件和软件实现的概念。
对程序大小的限制不是基于 RAM 大小,而是基于虚拟内存大小。
存在三种不同的实现虚拟内存的方法。
MMU 执行逻辑到物理地址的转换。
分页使用固定大小的页面在主存储器和辅助存储器之间移动。
分页使用页表将逻辑地址映射到物理地址。
分段使用不同大小的分段。
分段分页结合了分页和分段。
TLB 用于存储最新的逻辑到物理地址转换。
虚拟内存有助于将用户和主管程序以及一个用户的程序与另一个分开。
虚拟机还有助于提供隔离和保护。
可以通过不同的技术增加主存储器带宽。
我们可以使用更宽的主存或交错式主存来增加带宽。
 

网页链接/支持材料

计算机组织与设计——硬件/软件接口,David A. Patterson 和 John L. Hennessy,第 4 版,Morgan Kaufmann,Elsevier,2009 年。
Computer Architecture – A Quantitative Approach,John L. Hennessy 和 David A.Patterson,第 5 版,Morgan Kaufmann,Elsevier,2011。
计算机组织,Carl Hamacher、Zvonko Vranesic 和 Safwat Zaky,第 5 版,McGraw-Hill 高等教育,2011 年。